package com.tz.platform.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.hibernate.Session;

public interface IDao<T> {
	
	public Session getSession();

	/**
	 * 增加保存数据
	 * @param entity
	 */
	public void save(final T entity);

	/**
	 * 修改保存数据
	 * @param entity
	 */
	public void saveOrUpdate(final T entity);

	/**
	 * 根据ID删除数据
	 * @param id
	 */
	public void removeById(final Serializable id);
	
	/**
	 * 根据ID获取对象信息
	 * @param id
	 * @return
	 */
	public T get(final Serializable id);
	
	/**
	 * 根据hql查询对象信息
	 * @param hql
	 * @param values
	 * @return
	 */
	public T findUnique(final String hql, final Object... values);
	
	/**
	 * 根据HQL更新数据
	 * @param hql
	 * @param values
	 */
	public void executeByHql(final String hql, final Object... values);
	
	/**
	 * 根据SQL更新数据
	 * @param hql
	 * @param values
	 */
	public void executeBySql(final String sql, final Object... values);
	
	/**
	 * 根据hql查询最大的值
	 * @param hql
	 * @return
	 */
	public String getMaxValue(final String hql, final Object... values);

	
	
	/**
	 * 获取对象对应的所有的数据
	 * @return
	 */
	public List<T> getAll();

	/**
	 * 根据hql和Object条件查询list数据
	 * @param hql
	 * @param values
	 * @return
	 */
	public List<T> find(final String hql, final Object... values);
	

	/**
	 * 根据SQL和Object数据分页查询
	 * @param ql
	 * @param pageNo
	 * @param pageSize
	 * @param values
	 * @return
	 */
	public List<T> findPaged(final String ql, final int pageNo, final int pageSize, final Object... values);
	
	/**
	 * 按照数据库sql查询数据list
	 * @param sql
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public List<Map> findByNQL(final String sql,final Object... values);
	
	/**
	 * 清除对象
	 */
	public void clear();
	
}
